package com.winsdom.service.customer;

import com.winsdom.entity.customer.CustomerIndividualUpdateRequest;
import com.winsdom.service.customer.impl.CustomerIndividualUpdateServiceImpl;

/**
 * 个体工商户客户信息更新服务接口
 * <p>
 * 该接口负责处理个体工商户客户信息的更新业务逻辑，包括：
 * 1. 客户主表信息更新（基础信息）
 * 2. 个体工商户扩展表信息更新（如经营者信息）
 * 3. 经营地址、营业执照图片等附属信息管理
 * 4. 联系人信息及楼盘分类关联关系维护
 * <p>
 * 所有操作通过实现类中的事务管理确保数据一致性，
 * 若中途出现异常将自动回滚，保证数据完整性。
 */
public interface CustomerIndividualUpdateService {

    /**
     * 更新个体工商户客户信息的完整业务方法
     * <p>
     * 业务流程：
     * 1. 校验客户类型是否为个体工商户（类型码2），否则抛出异常
     * 2. 查询客户现有数据，用于对比变更字段
     * 3. 更新客户主表中发生变更的字段（选择性更新）
     * 4. 更新个体工商户扩展表中发生变更的字段
     * 5. 处理经营地址信息（非空时强制更新，无记录则不插入）
     * 6. 处理营业执照图片路径（非空时强制更新，无记录则不插入）
     * 7. 全量更新联系人信息及楼盘分类关联（先删除旧数据，再插入新数据）
     * <p>
     * 数据规范：
     * - 传入的{@link CustomerIndividualUpdateRequest}对象需包含客户ID和客户类型
     * - 客户类型必须为个体工商户（类型码2），否则拒绝更新
     * - 联系人关联的楼盘名称将自动去重，避免重复关联
     *
     * @param request 个体工商户更新请求实体，包含需要更新的字段（非null）
     * @throws IllegalArgumentException 当客户类型不是个体工商户或客户ID不存在时抛出
     * @see CustomerIndividualUpdateServiceImpl
     */
    void update(CustomerIndividualUpdateRequest request);
}